Windows编程系列:注册表

您所在的位置:网站首页 计算机 hkey Windows编程系列:注册表

Windows编程系列:注册表

2022-05-18 02:43| 来源: 网络整理| 查看: 265

注册表的概念

注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。

 

注册表结构

运行Regedit.exe,打开注册表编辑器,可以看到注册表的结构如下:

注册表是一个分层数据库,其中包含对于Windows以及Windows上运行的应用程序和服务的运行至关重要的数据。注册表是树型结构。树中的每个节点都称为键。每个键都可以包含子键和值。

注册表是按照“根键” -> "子键"  -> "键值"层次结构来组织的。

 

注册表包含五大根键

"HKEY_CLASSES_ROOT" : 包含各种文件类型关联数据的信息

"HKEY_CURRENT_USER": 包含当前登录计算机的用户账户的用户配置文件信息,例如桌面个性化、输入法设置、网络连接以及打印机首选项等

"HKEY_LOCAL_MACHINE":包含一些当前计算机的系统配置信息,例如系统内存、设备程序等

"HKEY_USERS" :包含默认用户的配置文件信息以及动态加载的用户配置文件信息

"HKEY_CURRENT_CONFIG":包含在计算机启动时系统所使用的硬件配置文件信息,用于配置一些计算机相关设置。例如加载设备的驱动程序、计算机使用的分辨率等

 

打开和关闭注册表

RegOpenKeyEx

打开注册表

LSTATUS RegOpenKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult );

hKey: 指向一个父键句柄

lpSubKey:指向一个字符串,用来表示要打开的子键名称

ulOptions:系统保留,必须指定为0

samDesired:打印注册表的存取权限,通过使用KEY_ALL_ACCESS表示全部权限

phkResult:接收打开的子键句柄

如果函数执行成功,则返回ERROR_SUCCESS,并且在phkResult中保存返回打开子键的句柄

 

RegCloseKey

关闭已打开的注册表句柄

1 LSTATUS RegCloseKey( 2 HKEY hKey 3 );

hKey:要关闭的键句柄,即RegOpenKeyEx的phkResult值

 

创建和删除子键

RegCreateKeyEx

创建一个子键

LSTATUS RegCreateKeyExA( HKEY hKey, LPCSTR lpSubKey, DWORD Reserved, LPSTR lpClass, DWORD dwOptions, REGSAM samDesired, const LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition );

 

hKey: 用来指向父键句柄

lpSubKey: 指向一个字符串,用来表示要创建的子键名称

ReServed:系统保留,必须指定为0值

lpClass:子键类名,一般设置为NULL值

dwOptions:创建子键时的选项,通常情况下使用REG_OPTION_NON_VOLATILE宏,表示创建的子键被创建到注册表文件中,而不是内存中

samDesired:打开注册表的存取权限,通常使用KEY_ALL_ACCESS。

lpSecurityAttributes:该参数指向一个SECURITY_ATTRIBUTE结构体,用来指定键句柄的安全属性,一般使用NULL

phkResult:指向用来接收打开的句柄

lpdwDisposition:指向DWORD的指针,该变量接收以下值:

REG_CREATED_NEW_KEY0x00000001L 键不存在且已创建。 REG_OPENED_EXISTING_KEY0x00000002L 键存在并且仅需打开即可更改。

如果lpdwDisposition为NULL,则不返回任何处置信息。

如果函数执行成功,则返回ERROR_SUCCESS,并且在phkResult中保存返回创建子键的句柄。当需要创建的子键已经存在,该函数和RegOpenKeyEx起到同样的作用。

 

RegDeleteKey

删除子键

1 LSTATUS RegDeleteKeyA( 2 HKEY hKey, 3 LPCSTR lpSubKey 4 );

hKey:用来指向父键句柄

lpSubKey:指向要删除的子键名称字符串

 

键值的查询、写入与删除

RegQueryValueEx

读取键名称中的数据或查询键名称的属性

1 LSTATUS RegQueryValueExA( 2 HKEY hKey, 3 LPCSTR lpValueName, 4 LPDWORD lpReserved, 5 LPDWORD lpType, 6 LPBYTE lpData, 7 LPDWORD lpcbData 8 );

hKey:用来指向要读取的键值项所处的子键句柄

lpValueName:用来指向要读取的键值项名称的字符串

lpReserved:保留参数,设置为NULL

lpType:接收返回的键值类型,如果不需要返回键值项类型,可以设置为NULL

lpDate:指向一个缓冲区,用来接收返回的键值数据

lpchData:在调用该函数时,这个参数用来指定缓冲区的长度;当函数返回时,该变量保存缓冲区实际接收到的长度

 

RegSetValueEx

写入键值项

1 LSTATUS RegSetValueExA( 2 HKEY hKey, 3 LPCSTR lpValueName, 4 DWORD Reserved, 5 DWORD dwType, 6 const BYTE *lpData, 7 DWORD cbData 8 );

 

hKey:用来指定要写入的键值项所处的子键句柄

lpValueName:指向定义键值项名称的字符串

Reservered:保存参数,设置为NULL

dwType:指定要写入的键值数据类型

lpData:指定要写入键值数据的缓冲区

cbData:要写入键值数据的缓冲区长度

 

RegDeleteValue

删除键值项

1 LSTATUS RegDeleteValueA( 2 HKEY hKey, 3 LPCSTR lpValueName 4 );

 

hKey:用来指定要删除的键值项所处的子键句柄

lpValueName:被删除键值项的名称

 

子键和键值的枚举

RegEnumKeyEx

子键枚举函数

1 LSTATUS RegEnumKeyExA( 2 HKEY hKey, 3 DWORD dwIndex, 4 LPSTR lpName, 5 LPDWORD lpcchName, 6 LPDWORD lpReserved, 7 LPSTR lpClass, 8 LPDWORD lpcchClass, 9 PFILETIME lpftLastWriteTime 10 );

 

hKey:指向被枚举的键句柄

dwIndex:指定需要返回信息的子键索引编号

lpName:用户接收返回子键名称的缓冲区

lpcchName:在调用函数前,该参数保存lpName指向缓冲区的长度;在调用该函数后,该参数保存缓冲区实际接收到的数据的长度

lpReserved:保留参数,必须为NULL值

lpClass:指向接收枚举子项的用户定义类。一般指定为NULL

lpcchClass:指向lpClass参数指定的缓冲区的大小,一般指定为NULL

lpftLastWriteTime:指向一个FILETIME结构体,用于接收最后一次被写入的时间

 

RegEnumValue

枚举键值

1 LSTATUS RegEnumValueA( 2 HKEY hKey, 3 DWORD dwIndex, 4 LPSTR lpValueName, 5 LPDWORD lpcchValueName, 6 LPDWORD lpReserved, 7 LPDWORD lpType, 8 LPBYTE lpData, 9 LPDWORD lpcbData 10 );

 

hKey:指向被枚举的键句柄

dwIndex:指定需要返回信息的键值索引编号

lpValueName:接收返回值名称的缓冲区

lpcchValueName:有调用该参数前,该参数保存lpValueName指向缓冲区的长度;在该函数调用完成后,该参数保存缓冲区实际接收到的数据的长度

lpReserved:保留参数,必须为NULL

lpType:指向返回键值数据类型

lpData:接收返回键值数据的缓冲区

lpcbData:在调用该函数前,该参数保存lpData指向缓冲区的长度;在该函数调用完成后,该参数保存缓冲区实际收到的数据的长度

 

常用的注册表设置(设置前建议备份整个注册表)

禁用快捷菜单的”发送到“菜单项

打开计算机\HKEY_CLASSES_ROOT\AllFilesystemObjects\shellex\ContextMenuHandlers\SendTo 删除默认值。如果要恢复,将默认值设置为 {7BA4C740-9E81-11CF-99D3-00AA004AE837}

 

删除快捷方式箭头

打开计算机\HKEY_CLASSES_ROOT\lnkfile,删除IsShortcut键值

 

隐藏桌面图标

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建名称为NoSetFolders键值,并设置数据为1

 

禁止访问任务管理器

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System,修改DisableTaskmgr键值的数据为1。如果没有DisableTaskmgr键值,就创建一个。

 

在桌面显示Windows版本

打开计算机\HKEY_CURRENT_USER\Control Panel\Desktop,修改PaintDesktopVersion键值的数据为1

 

隐藏”重新启用“、”睡眠”和“休眠”命令

打开计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer,新建一个NoClose键值,并设置数据为1

 

禁用计算机中的USB端口

打开计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR,修改Start键值数据为4

 

配置开机启动项

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

 

 

推荐阅读:

注册表

https://docs.microsoft.com/en-us/windows/win32/sysinfo/registry



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3